﻿namespace AbcCorp.DTO
{
    /// <summary>
    /// Lớp sao chép thuộc tính của đối tượng này cho đối tượng khác
    /// </summary>
    /// <typeparam name="T">Source object</typeparam>
    /// <typeparam name="U">Destination object</typeparam>
    public class CopyObject<T, U>
    {
        /// <summary>
        /// Copy object
        /// </summary>
        /// <param name="source">Source object</param>
        /// <param name="dest">Destination object</param>
        public static void CopyProperties(T source, U dest)
        {
            var type1 = source.GetType();
            var type2 = dest.GetType();

            foreach (var pInfo1 in type1.GetProperties())
            {
                foreach (var pInfo2 in type2.GetProperties())
                {
                    if (pInfo1.Name != pInfo2.Name) continue;
                    if (pInfo1.CanRead && pInfo2.CanWrite)
                        pInfo2.SetValue(dest, pInfo1.GetValue(source, null), null);
                    break;
                }
            }
        }
    }
}
